<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
        es6新特性：
          let和const，用来定义变量
            不能重复声明
            没有变量提升（实际有提升，只是到达定义之前不能访问，等价于没有提升）
            产生块级作用域
          解构赋值，用来简化提取数据
          模板字符串，用来简化字符串拼串
          ...扩展运算符，用来展开对象/数组
          对象简写
          形参默认值

          箭头函数 
            this指向

          class 构造函数的语法糖
            原型

          Set和Map容器，用来存储数据新容器
            Set 类似于数组，特点：内部的值是唯一的
            Map 类似于对象，特点：key可以是任意类型

            WeakSet 类似于Set，特点：1. 只能储存对象数据 2. 一旦存储的数据外部没有引用，会被垃圾回收机制自动回收（弱引用）
            WeakMap 类似于Map，特点：1. key只能是对象类型 2. 一旦key对应的对象数据外部没有引用，会被垃圾回收机制自动回收（弱引用）
      
            Vue3响应式原理

          Proxy代理，用来代理对象上读取属性/设置属性/删除属性的方法

            Vue3响应式原理

          Promise 异步编程解决方案
          Async/await ES8 + Promise 异步编程最终解决方案
      */

      const s1 = new WeakSet();
      let obj = { name: "jack" };
      s1.add(obj);
      obj = null;
      console.log(s1);
    </script>
  </body>
</html>
